package com.shujia.base.javamr;

import java.io.*;
import java.util.ArrayList;

public class SplitFileBlock {
    public static void main(String[] args) throws Exception {
        //将数据读取进来
        //字符缓冲输入流
        BufferedReader br = new BufferedReader(new FileReader("hadoop/data/student.txt"));
        int index = 0;
        //字符缓冲输出流
        BufferedWriter bw = new BufferedWriter(new FileWriter("hadoop/data/blocks/block---" + index));

        //现在是假设一行数据是1m,每128m数据，就生成一个block块，不到128m也会生成一个block块
        //每次读到128*1.1约等于140行的数据，就写入128行，剩下的12行计入下一次block块中去存储
        //定义一个集合，用于存储，读取的内容
        ArrayList<String> row = new ArrayList<>();

        String line = null;

        //定义一个变量，记录读取的行数
        int offset = 0;
        //定义一个变量，记录读取的是哪一个block块
        int rowNum = 0;


        while ((line = br.readLine()) != null) {
            //将一条数据添加到集合中
            row.add(line);
            offset++; // 统计添加了多少条数据
            //当我们的偏移量，128*1.1约等于140行的数据，就写入128行，剩下的12行计入下一次block块中去存储
            if (offset == 140) {
                //第一写block块的时候，索引从128*index-127  block-index
                //第二写block块的时候，索引从128*index-255  block-index
                //第三写block块的时候，索引从128*index-283  block-index
                //
                rowNum = 128 * index; // 每一次生成block块读取的开始索引
                //循环128次，将集合存储的数据，写入到block块中
                for (int i = rowNum; i <= rowNum + 127; i++) {
                    String s = row.get(i);
                    bw.write(s);
                    bw.newLine();
                    bw.flush();
                }
                index++;
                //将offset设置为12
                offset = 12;
                bw = new BufferedWriter(new FileWriter("hadoop/data/blocks/block---" + index));
            }
        }

        //把剩余的数据写到一个block块中
        for(int i = row.size()-offset;i<row.size();i++){
            String s = row.get(i);
            bw.write(s);
            bw.newLine();
            bw.flush();
        }

        //释放资源
        bw.close();
        br.close();




    }
}